package com.xuegao.xuegaotool;

import org.apache.commons.lang3.ObjectUtils;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.concurrent.TimeUnit;

@SpringBootApplication
public class XuegaoToolApplication {

    // @Value("${version}")
    private static String versionStr = "0.0.5";

    // springboot 的 版本
    // private static String versionStr = SpringApplication.class.getPackage().getImplementationVersion();

    private static JTextField topTime;
    private static JTextField jugTime;
    private static JTextField midTime;
    private static JTextField adcTime;
    private static JTextField supTime;


    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                createAndShowGUI();
            }
        });
        SpringApplication.run(XuegaoToolApplication.class, args);
    }

    private static void createAndShowGUI() {
        // 创建 JFrame 实例
        final JFrame frame = new JFrame("xuegao工具");

        // 设置 frame 窗口的整体大小
        frame.setSize(900, 400);
        // 点击 X 进程直接关闭
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // 获得一个对象
        Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
        // 设置frame再最中央显示
        frame.setLocation((dimension.width - frame.getWidth()) / 2, (dimension.height - frame.getHeight()) / 2);
        // 创建面板，这个类似于 HTML 的 div 标签
        JPanel panel = new JPanel();
        // 设置内容面板
        frame.setContentPane(panel);

        // 调用用户定义的方法并添加组件到面板
        addDisplay(panel);
        // 转换图dpi
        // addRestButton(panel);

        // pdf转图片
        addPdfToPhoto(panel);

        addLicense(panel);

        // 报错
        // frame.setUndecorated(true);
        // frame.getRootPane().setWindowDecorationStyle(JRootPane.NONE);
        // 设置 frame 可见
        frame.setVisible(true);

        // 屏蔽最大化
        // frame.setResizable(false);
        // 禁用关闭
        // frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        // frame.setExtendedState(JFrame.NORMAL);
        // 设置 frame 在最上层显示
        // frame.setAlwaysOnTop(true);

    }

    private static void addPdfToPhoto(JPanel panel) {
        // top
        JButton top = new JButton("转换");
        top.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String filePath = midTime.getText();

                File chooseFile = new File(filePath);
                int flag;
                if (Boolean.FALSE.equals(chooseFile.exists())) {
                    JOptionPane.showMessageDialog(panel, "文件或文件夹不存在", "无法操作警告", JOptionPane.WARNING_MESSAGE);
                    return;
                } else {
                    //返回的是按钮的index  i=0或者1
                    flag = JOptionPane.showConfirmDialog(null, "请检查您的路径，是否进行转换", "确认", JOptionPane.YES_NO_OPTION);
                    System.out.println(flag);
                }
                if (flag > 0) {
                    return;
                }

                if (Boolean.TRUE.equals(chooseFile.isDirectory())) {
                    File[] fileArr = chooseFile.listFiles();
                    if (ObjectUtils.isEmpty(fileArr)) {
                        return;
                    }
                    for (File file : fileArr) {
                        if (file.isDirectory()) {
                            continue;
                        }
                        String newFilePath = FileDeal.createFileV4(panel, file);
                        System.out.println("fjmcs 1 " + newFilePath);
                        PdfToPhotoUtils.pdfToPhoto(file, newFilePath);
                    }
                }
                if (Boolean.TRUE.equals(chooseFile.isFile())) {
                    String newFilePath = FileDeal.createFileV4(panel, chooseFile);
                    System.out.println("fjmcs 2 " + newFilePath);
                    PdfToPhotoUtils.pdfToPhoto(chooseFile, newFilePath);
                }
                JOptionPane.showMessageDialog(panel, "转换已完成，2秒钟后自动关闭程序", "转换已完成", JOptionPane.INFORMATION_MESSAGE);
                try {
                    TimeUnit.SECONDS.sleep(2);
                } catch (InterruptedException interruptedException) {
                    interruptedException.printStackTrace();
                }
                System.exit(0);
            }


        });
        top.setBounds(150, 20, 65, 25);
        panel.add(top);
    }

    private void createFileV3(File chooseFile) {

    }

    private static void addDisplay(JPanel panel) {
        // 布局部分我们这边不多做介绍
        // 这边设置布局为 null
        panel.setLayout(null);
        panel.setFocusable(true);

        // 创建 上单
        // JLabel userLabel = new JLabel("水平分辨率输入");
        // // setBounds(x, y, width, heig  ht)
        // // x 和 y 指定左上角的新位置，由 width 和 height 指定新的大小。
        // userLabel.setBounds(10, 20, 200, 25);
        // panel.add(userLabel);
        // // 创建文本域用于用户输入
        // topTime = new JTextField("300");
        // topTime.setBounds(110, 20, 35, 25);
        // // 添加键盘监听事件
        // panel.add(topTime);

        // // 创建 打野
        // JLabel userLabel2 = new JLabel("垂直分辨率输入");
        // // setBounds(x, y, width, heig  ht)
        // // x 和 y 指定左上角的新位置，由 width 和 height 指定新的大小。
        // userLabel2.setBounds(10, 45, 200, 25);
        // panel.add(userLabel2);
        // // 创建文本域用于用户输入
        // jugTime = new JTextField("300");
        // jugTime.setBounds(110, 45, 35, 25);
        // // 添加键盘监听事件
        // panel.add(jugTime);

        // 创建 打野
        JLabel userLabel3 = new JLabel("文件地址输入");
        // setBounds(x, y, width, heig  ht)
        // x 和 y 指定左上角的新位置，由 width 和 height 指定新的大小。
        userLabel3.setBounds(10, 70, 200, 25);
        panel.add(userLabel3);
        // 创建文本域用于用户输入
        midTime = new JTextField("文件夹地址 或者 单个文件地址");
        midTime.setBounds(110, 70, 400, 25);
        // 添加键盘监听事件
        panel.add(midTime);

    }

    private static void addLicense(JPanel panel) {
        // 创建登录按钮
        JButton systemButton = new JButton("关闭按钮");
        systemButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(1);
            }
        });
        systemButton.setBounds(10, 200, 180, 25);
        panel.add(systemButton);
        // 创建文本域用于用户输入
        JTextField version = new JTextField(20);
        version.setText("xuegao工具 版本：" + versionStr);
        version.setBounds(10, 225, 180, 25);
        // 添加键盘监听事件
        panel.add(version);
        // 创建文本域用于用户输入
        JTextField github = new JTextField("5:00");
        github.setText("注意事项：https://gitee.com/warriorfromlongago/xuegao-tool/wikis/%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9?sort_id=3319087");
        github.setBounds(10, 250, 900, 25);
        // 添加键盘监听事件
        panel.add(github);
    }

    // private static void addRestButton(final JPanel panel) {
    //     // top
    //     JButton top = new JButton("转换");
    //     top.addActionListener(new ActionListener() {
    //         @Override
    //         public void actionPerformed(ActionEvent e) {
    //             String xDensity = topTime.getText();
    //             // String yDensity = jugTime.getText();
    //             String filePath = midTime.getText();
    //
    //             if (Boolean.FALSE.equals(StringUtils.isNumeric(xDensity))) {
    //                 JOptionPane.showMessageDialog(panel, "请输入整数的水平分辨率", "无法操作警告", JOptionPane.WARNING_MESSAGE);
    //                 return;
    //             }
    //             // if (Boolean.FALSE.equals(StringUtils.isNumeric(yDensity))) {
    //             //     JOptionPane.showMessageDialog(panel, "请输入整数的垂直分辨率", "无法操作警告", JOptionPane.WARNING_MESSAGE);
    //             //     return;
    //             // }
    //             File chooseFile = new File(filePath);
    //             int flag;
    //             if (Boolean.FALSE.equals(chooseFile.exists())) {
    //                 JOptionPane.showMessageDialog(panel, "文件或文件夹不存在", "无法操作警告", JOptionPane.WARNING_MESSAGE);
    //                 return;
    //             } else {
    //                 //返回的是按钮的index  i=0或者1
    //                 flag = JOptionPane.showConfirmDialog(null, "请检查您的路径，是否进行转换", "确认", JOptionPane.YES_NO_OPTION);
    //                 System.out.println(flag);
    //             }
    //             if (flag > 0) {
    //                 return;
    //             }
    //             if (Boolean.TRUE.equals(chooseFile.isDirectory())) {
    //                 System.out.println("是文件夹");
    //                 File[] fileArr = chooseFile.listFiles();
    //                 if (ObjectUtils.isEmpty(fileArr)) {
    //                     return;
    //                 }
    //                 String newFilePath = createFile1(panel, chooseFile);
    //                 for (File file : fileArr) {
    //                     System.out.println(file.getName());
    //                     String suffix = getSuffix(file.getName());
    //                     if (SUFFIX_IMAGE_LIST.contains(suffix)) {
    //                         String newFilePathStr = newFilePath + file.getName();
    //                         System.out.println(newFilePathStr);
    //                         File newFile = new File(newFilePathStr);
    //                         // ImageIOTest.handleDpi(file, newFile, Integer.parseInt(xDensity), Integer.parseInt(yDensity));
    //                         try {
    //                             if ("jpg".equals(suffix)) {
    //                                 System.out.println("jpg");
    //                                 JpegChangeDpi.handleDpi(file, newFile, Integer.parseInt(xDensity), Integer.parseInt(xDensity));
    //                             } else if ("jpeg".equals(suffix)) {
    //                                 System.out.println("jpeg");
    //                                 JpegChangeDpi.handleDpi(file, newFile, Integer.parseInt(xDensity), Integer.parseInt(xDensity));
    //                             }
    //                         } catch (Exception exception) {
    //                             exception.printStackTrace();
    //                         }
    //                     }
    //                 }
    //             }
    //             if (Boolean.TRUE.equals(chooseFile.isFile())) {
    //                 String newFilePathParent = createFile2(panel, chooseFile);
    //                 System.out.println(chooseFile.getName());
    //                 String suffix = getSuffix(chooseFile.getName());
    //                 if (SUFFIX_IMAGE_LIST.contains(suffix)) {
    //                     String newFilePath = newFilePathParent + chooseFile.getName();
    //                     System.out.println(newFilePath);
    //                     File newFile = new File(newFilePath);
    //                     // ImageIOTest.handleDpi(file, newFile, Integer.parseInt(xDensity), Integer.parseInt(yDensity));
    //                     try {
    //                         if ("jpg".equals(suffix)) {
    //                             System.out.println("jpg");
    //                             JpegChangeDpi.handleDpi(chooseFile, newFile, Integer.parseInt(xDensity), Integer.parseInt(xDensity));
    //                         } else if ("jpeg".equals(suffix)) {
    //                             System.out.println("jpeg");
    //                             JpegChangeDpi.handleDpi(chooseFile, newFile, Integer.parseInt(xDensity), Integer.parseInt(xDensity));
    //                         }
    //                     } catch (Exception exception) {
    //                         exception.printStackTrace();
    //                     }
    //                 }
    //             }
    //             JOptionPane.showMessageDialog(panel, "转换已完成，2秒钟后自动关闭程序", "转换已完成", JOptionPane.INFORMATION_MESSAGE);
    //             try {
    //                 TimeUnit.SECONDS.sleep(2);
    //             } catch (InterruptedException interruptedException) {
    //                 interruptedException.printStackTrace();
    //             }
    //             System.exit(0);
    //         }
    //     });
    //     top.setBounds(150, 20, 65, 25);
    //     panel.add(top);
    // }


}
